package com.example.review.ParseData;

import android.util.Log;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import java.io.StringReader;

/**
 * PULL解析XML
 */
public class ParseXmlWithPull {

/**
 * 需要解析的数据
 */
//    <apps>
//        <app>
//            <id>1</id>
//            <name>Google Maps</name>
//            <version>1.0</version>
//        </app>
//        <app>
//            <id>2</id>
//            <name>Chrome</name>
//            <version>2.1</version>
//        </app>
//        <app>
//            <id>3</id>
//            <name>Google Play</name>
//            <version>2.3</version>
//        </app>
//    </apps>
    /**
     * Pull解析方式 解析XML数据
     * @param xmlData
     */
    private void parseXMLWithPull(String xmlData) {
        try {
            //先要获取到一个XmlPullParserFactory 的实例，
            // 并借助这个实例得到XmlPullParser 对象，
            // 然后调 用XmlPullParser 的setInput() 方法将服务器返回的XML数据设置进去就可以开始解析 了
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            XmlPullParser xmlPullParser = factory.newPullParser();
            xmlPullParser.setInput(new StringReader(xmlData));
            //开始解析  过getEventType() 可以得到当前的解析事件
            int eventType = xmlPullParser.getEventType();
            String id = "";
            String name = "";
            String version = "";
            //如果当前的解析事件不等于XmlPullParser.END_DOCUMENT，
            // 说 明解析工作还没完成，调用next() 方法后可以获取下一个解析事件
            while (eventType != XmlPullParser.END_DOCUMENT) {
                //得到当前节点的名字
                String nodeName = xmlPullParser.getName();
                switch (eventType) {
                    // 开始解析某个节点  一个app节点
                    case XmlPullParser.START_TAG: {
                        if ("id".equals(nodeName)) {
                            //调用nextText() 方法来获取节点内具体的内容
                            id = xmlPullParser.nextText();
                        } else if ("name".equals(nodeName)) {
                            name = xmlPullParser.nextText();
                        } else if ("version".equals(nodeName)) {
                            version = xmlPullParser.nextText();
                        }break;
                    }
                    // 完成解析某个节点
                    case XmlPullParser.END_TAG: {
                        if ("app".equals(nodeName)) {
                            Log.d("MainActivity", "id is " + id);
                            Log.d("MainActivity", "name is " + name);
                            Log.d("MainActivity", "version is " + version);
                        }
                        break;
                    }
                    default:
                        break;
                }
                //调用next() 方法后可以获取下一个解析事件
                eventType = xmlPullParser.next();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
